Python 函数

前言

函数是对某个功能的封装,Python和其他脚本型语言一样,例如javascript,函数名称只是对函数的引用,并且函数是可以作为参数传递的,我们也可以将函数赋给另外一个变量,这一点是和java语言不同之处。接下来将围绕着内置函数,如何调用函数,以及如何自定义函数来展开学习。

内置函数

和其他语言一样,对于比较常用的功能,Python已经为我们提供了内置函数,我们可以直接使用,下面将介绍一些经常使用的函数:

  1. 取绝对值函数:abs(var0)
  2. 取最小最大值函数:min(var0,var1,var2…) ;max(var0,var1,var2…)
  3. 类型转换函数:int(var0);str(var0);bool(var0);等
# -*- coding: utf-8 -*-

"""
Python 函数学习
"""

__author__ = 'Pan Li'

print("绝对值:", abs(-123))

print("最小值:", min(1, 2, -1, 0, 3))

print("最大值:", max(1, 2, -1, 0, 3))

print("字符串转整形:", int("123"))

print("整形转bool型:", bool(0))

print("数值型转字符串:", str(12.34))

自定义函数

在Python中自定义函数需要使用def关键字进行声明。定义一个从1加到100的函数?

#累加函数
def accumulate(n):
if not isinstance(n, int):
raise TypeError("不合法的参数值,必须是整数")
elif n < 0:
raise Exception("不合法的参数值,必须大于或等于0")

if n == 0:
return 0
elif n == 1:
return 1
else:
return n + accumulate(n-1)

print("从1加到100的:", accumulate(100))

空函数

什么是空函数呢?顾名思义,就是没有函数体的函数;Python定义空函数需要使用pass关键字,pass关键字告诉解释器什么都不做。

#定义一个名称为nop的空函数
def nop():
pass

函数参数

Python的函数具有非常灵活的参数形态,支持默认参数,可变参数,以及关键字参数等。必传参数在前,默认参数在后,否则Python解释器会报错。

#默认参数,其中angle就是个默认参数,我们可以传或者不传
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny

print("使用默认参数值:", move(1, 2, 1))
print("使用自定义参数值:", move(1, 2, 1, 30))


#可变参数。在函数内部,参数numbers接收到的是一个元组tuple
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum

print("参数平方之和:", calc(1, 2))

#将元组tuple或list变量前加*,做为可变参数传入
params = [1, 2, 3];
print("参数平方之和:", calc(*params))


#关键字参数
"""
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。
而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
元组tuple类似于Java中的数组Array,dict类似java中的Map。
"""
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)

#name: Pan Li age: 26 other: {'city': 'Shen Zhen', 'job': 'IT'}
person("Pan Li", 26, city='Shen Zhen', job='IT')

函数返回值

Python的函数具有非常灵活的返回值形态,对于每个Python函数都是有返回值的,即使我们没有return,也会默认返回一个None。并且Python函数支持返回多个返回值,但其实就是一个元组tuple。

#空函数,会自动补上 return None
#nop返回值: None
print("nop返回值:", nop())

#定义多返回值函数
#move返回值: (1.154251449887584, 2.9880316240928617)
result = move(1, 2, 1, 30)
print("move返回值:", result)
print("move返回值1:", result[0])
print("move返回值2:", result[1])